centos7.9 编译安装python

python版本自行官网下载,切换到 3.10 和 3.11 后发现, 只要涉及 HTTPS 请求就会报 SSL 模块错误.

所以核心问题就是解决openssl问题, CentOS 7 自带的 openssl 版本是 1.0.2k 之类, 不符合 python 3.10 版本的要求, 所以安装 python 请求 HTTPS 链接就会报 SSL 模块错误.

openssl-1.1.1w.tar.gz

Python-3.11.7.tgz

1.安装编译依赖

2.更新openssl

3.编译安装python

第一步,安装编译依赖

1
2
yum -y groupinstall "Development tools"
yum -y install wget gcc-c++ pcre pcre-devel zlib zlib-devel libffi-devel zlib1g-dev openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel bzip2-devel

第二步,更新openssl

2.1 移除原有openssl

1
2
3
4
5
#查看原openssl
openssl version

#移除原有openssl
yum -y remove openssl

2.2 更新 CentOS 信任根证书, 防止遇到 HTTPS 不信任证书的问题

1
2
3
yum -y install ca-certificates
update-ca-trust force-enable
update-ca-trust extract

2.3 编译安装openssl

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
#下载
wget  https://www.openssl.org/source/openssl-1.1.1w.tar.gz  --no-check-certificate
tar -zxf openssl-1.1.1w.tar.gz
cd openssl-1.1.1w

#编译安装
./config --prefix=/usr/local/openssl
make -j && make install

#备份
cp /usr/bin/openssl /usr/bin/openssl.`date +%F_%H%M%S`
cp /etc/ld.so.conf /etc/ld.so.conf.`date +%F_%H%M%S`
#更新
ln -sf /usr/local/openssl/bin/openssl /usr/bin/openssl
echo '/usr/local/openssl/lib' >>/etc/ld.so.conf
ldconfig -v

#验证新版本(输出当前安装的版本)
openssl version

第三步,编译安装python

3.1 下载编译安装

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#下载
wget https://www.python.org/ftp/python/3.11.7/Python-3.11.7.tgz  --no-check-certificate
# 国内服务器可使用淘宝镜像
# wget https://registry.npmmirror.com/-/binary/python/3.11.7/Python-3.11.7.tgz
tar xvzf Python-3.11.7.tgz
cd Python-3.11.7

#编译安装(--enable-optimizations 性能优化,需要gcc10版本,但centos7默认gcc4版本,所以咱们跳过)
./configure --prefix=/usr/local/python3.11 --with-openssl=/usr/local/openssl --with-openssl-rpath=auto 
make -j && make altinstall

3.2 创建软连接

1
2
3
4
5
6
7
#创建版本软连接
ln -sf /usr/local/python3.11/bin/pip3.11 /usr/bin/pip3.11
ln -sf /usr/local/python3.11/bin/python3.11 /usr/bin/python3.11

#验证
python3.11 --version
pip3.11 --version

3.4 创建别名(可选,推荐)

修改当前用户环境配置~/.bashrc

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
#备份
cp  ~/.bashrc    ~/.bashrc.`date +%F_%H%M%S`

# 默认使用 Python 3.11
echo '
alias python=python3.11
alias pip=pip3.11
' >> ~/.bashrc 

#生效
source ~/.bashrc

#验证
python --version  # 应显示 Python 3.x.x
pip --version     # 应显示 pip 对应 Python 3.x.x

3.4 创建虚拟环境(可选,推荐)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
VENV_NAME=venv
VENV_DIR=/opt/pyenv

#创建虚拟环境
python -m venv $VENV_DIR/$VENV_NAME
#mkdir -p $VENV_DIR
#cd $VENV_DIR
#python -m venv $VENV_NAME


#激活进入虚拟环境
source $VENV_DIR/$VENV_NAME/bin/activate

#退出当前虚拟环境
deactivate

#删除虚拟环境,直接删除对应目录即可
rm -rf $VENV_DIR/$VENV_NAME